package com.demo.java.OD351_400.OD363;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【 打印任务排序(B卷-200分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146223461
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String inputStr = scanner.nextLine();

        // 解析输入字符串，得到任务的优先级
        String[] numStrings = inputStr.split(",");
        int[] nums = new int[numStrings.length];
        for (int i = 0; i < numStrings.length; i++) {
            nums[i] = Integer.parseInt(numStrings[i]);
        }

        // 将任务和任务编号存储到列表中
        List<Map.Entry<Integer, Integer>> numsList = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            numsList.add(new AbstractMap.SimpleEntry<>(i, nums[i]));
        }

        // 使用双端队列存储任务
        Deque<Map.Entry<Integer, Integer>> queue = new LinkedList<>(numsList);

        // 存储结果列表，记录每个任务的执行顺序
        List<Map.Entry<Integer, Integer>> ans = new ArrayList<>();
        int count = 0;

        // 模拟任务调度
        while (queue.size() > 1) {
            // 获取队首任务
            Map.Entry<Integer, Integer> task = queue.pollFirst();

            // 找到队列中优先级最高的任务
            Map.Entry<Integer, Integer> curMax = Collections.max(queue, Comparator.comparingInt(Map.Entry::getValue));

            // 如果当前任务优先级不低于最高优先级任务，执行当前任务
            if (task.getValue() >= curMax.getValue()) {
                ans.add(new AbstractMap.SimpleEntry<>(task.getKey(), count));
                count++;
            } else {
                // 否则，将当前任务放到队列末尾
                queue.addLast(task);
            }
        }

        // 将最后剩余的任务执行
        ans.add(new AbstractMap.SimpleEntry<>(queue.getFirst().getKey(), count));

        // 按任务编号排序并输出结果
        ans.sort(Comparator.comparingInt(Map.Entry::getKey));

        // 输出执行顺序
        for (int i = 0; i < ans.size(); i++) {
            System.out.print(ans.get(i).getValue());
            if (i != ans.size() - 1) {
                System.out.print(",");
            }
        }
    }
}